﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using kk.components.contracts;
using kk.components.contracts.ServiceContract;
using kk.messages.contracts.DataModel;
using kk.messages.contracts.ViewModel;
using XcoAppSpaces.Core;

namespace kk.kinokasseservicestub
{
    class KinokasseServiceWorker : PKinokasseServiceStub
    {
        [XcoConcurrent]
        public void ProcessBelegungsplanZuVorstellung(PKinokasseServiceStub.Belegungsplananforderung belegungsplananforderung)
        {
            this.OnBelegungsplanZuVorstellung
                .Request<Vorstellung, Belegungsplan>(belegungsplananforderung.Vorstellung)
                .Receive(belegungsplan => belegungsplananforderung.ResponsePin.Post(belegungsplan));
        }

        [XcoExclusive]
        public void ProcessReservierungsanfrage(PKinokasseServiceStub.ReservierungenVornehmen anfrage)
        {
            this.OnReservierungsanfrage
                .Request<Reservierungsanfrage, Reservierungsbestätigung>(anfrage.Reservierungsanfrage)
                .Receive(bestätigung => anfrage.ResponsePin.Post(bestätigung));
        }

        public event Action<Request<Vorstellung, Belegungsplan>> OnBelegungsplanZuVorstellung;
        public event Action<Request<Reservierungsanfrage, Reservierungsbestätigung>> OnReservierungsanfrage;
    }
}
